//
// Created by QU on 2023/12/16.
//

//#define DATE_TIME_NO_DEFAULT_CONSTRUCTOR

#include <iostream>
#include <map>

#include <boost/date_time/gregorian/gregorian.hpp>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/local_time/local_time.hpp>

using std::cout;
using std::cin;
using std::endl;

using namespace boost::posix_time;
using namespace boost::gregorian;
using namespace boost::local_time;


int main(){

    // 如果定义了这个宏, 将会没有默认的构造函数.
//#define DATE_TIME_NO_DEFAULT_CONSTRUCTOR
    date();
    ptime();

    // 启用boost时间便捷类型
#define BOOST_DATE_TIME_OPTIONAL_GREGORAIN_TYPES

    // 启用更高的时间精确度
#define BOOST_DATE_POSIX_TIME_STD_CONFIG

    tz_database tz_db;
    tz_db.load_from_file(R"(C:\boost_1_83_0\libs\date_time\data\date_time_zonespec.csv)");
    // 在编译目录中, 通常不是在./目录.
    auto shangHai_zone= tz_db.time_zone_from_region("Asia/Shanghai");
    auto los_zone = tz_db.time_zone_from_region("America/Los_Angeles");
    // 创建两个时区

    // 存在夏令时
    cout << shangHai_zone->has_dst() << endl;

    // 时区的名字
    cout << los_zone->std_zone_name() << endl;

    // 本地时间
    local_date_time localDateTimeSH ( date(2023,3,15),hours(10),shangHai_zone, false);

    local_date_time myLocalDateTime(ptime(date(2023,10,10),millisec(500)), shangHai_zone);
    cout << myLocalDateTime.to_string() << '\n' <<
         myLocalDateTime.utc_time() << '\n' << myLocalDateTime.zone_as_posix_string() << endl;

    cout << localDateTimeSH << endl;

    // 根据本地时间创建的其他地区时间
    local_date_time localDateTimeLS = localDateTimeSH.local_time_in(los_zone);

    cout << localDateTimeLS << endl;

}


